theia 文件树打开文件要经过几道处理

记录下,需要照此写一个简化版的 menu 点击打开“页面”的功能

  • 阅读源码技巧
    • 找到尽可能的会命中的断点
      • e.g. 这里是凭感觉找到 file-service 里的 resolve
        • 总结
          • 看 structures
          • 尽量找 service,一般都是自己写的没有什么 boilerplate code,不容易重名
    • 看堆栈
  • 点击打开 - 堆栈
    • tree widget
      • handleClickEvent
      • tapNode
    • navigator tree widget < tree widget
      • override tapNode
    • navigator model [1]
    • opener service
      • default opener service [2]
    • editor manager < bind(OpenHandler)[3]
    • widget-open-handler
    • editor widget factory
    • ...monaco
    • resources
    • resolver
  • 初次打开
    • onActivateRequest

  1. 没问题 widget 将逻辑 delegate 给 model ↩︎
  2. 主要逻辑,根据优先级获取 OpenHandler ↩︎
  3. 调用 super(即 widget open handler)#open ↩︎